如何配置一个安全的 DNS 服务器
配置一个安全的DNS服务器的措施有以下这些:
隔离DNS服务器:首先应该隔离BIND服务,不应该在DNS服务器上运行其他服务,尤其是允许普通用户登录。减少其他服务可以缩小被攻击的可能性,比如混合攻击。
为BIND创建chroot:chroot是指更改某个进程所能看到的根目录,即将某进程限制在指定的目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。
隐藏BIND的版本号:通常软件的Bug信息是和特定版本相关的,因此版本号是黑客寻求的最有价值的信息。黑客使用dig命令可以查询BIND的版本号,然后黑客就知道这个软件有哪些漏洞。因此,随意公开版本号是不明智的。隐藏BIND版本号比较简单,只需修改配置文件/etc/named.conf,在option部分添加version声明,将BIND的版本号信息覆盖。
避免透露服务器的信息:和版本号一样,也不要轻易透露服务器的其他信息。为了让潜在的黑客更难得手,建议不要在DNS配置文件中使用HINFO和TXT两个资源记录。
关闭DNS服务器的glue fetching选项:当DNS服务器返回一个域的域名服务器记录,并且域名服务器记录中没有A记录,DNS服务器会尝试用glue fetching获取一个记录。攻击者可以利用glue fetching进行DNS欺骗,关闭glue fetching是一个好方法。
控制区域(zone)传输:默认情况下BIND的区域(zone)传输是全部开放的,如果没有限制,DNS服务器允许对任何人进行区带传输,那么网络架构中的主机名、主机IP列表、路由器名和路由IP列表,甚至包括各主机所在的位置和硬件配置等情况都很容易被入侵者得到。因此,要对区带传输进行必要的限制。
请求限制:任何人都可以对DNS服务器发出请求,这是不能接受的。限制DNS服务器的服务范围很重要,可以把许多入侵者拒之门外。
为DNS服务器配置DNS Flood Detector:DNS Flood Detector是针对DNS服务器的SYN Flood攻击的检测工具,用于侦测恶意地使用DNS的查询功能。DNS Flood Detector会监控向服务器查询名称解析的数量,分成守护进程(daemon)和后台(bindsnap)模式。守护进程模式会通过syslog发出警示(/var/log/messages)及bindsnap模式:得到接近实时的查询状态。
建立完整的域名服务器:了提高域名系统的可靠性,应建立辅助域名服务器。当主域名服务器不能正常工作时,辅助域名服务器能够替代主域名服务器对外提供不间断的服务,并起到数据备份的作用。当主域名服务器对其所管理的授权区域内的数据进行改动后,辅助域名服务器按照规定的时间间隔使用区带传输从主域名服务器获取改动后的信息,然后刷新自己相应区域内的数据,从而保持与主域名服务器的一致性。但是必须对“区带传输”加以限制,只允许自己的主/辅助域名服务器进行区带传输。在主/辅助域名服务器的named.conf文件中分别用allow-transfer加以限制。辅助域名服务器的配置与主域名服务器的配置很相似,只是主域名服务器的授权域的type为master,而辅助域名服务器的授权域的type为slave。
建立DNS日志:对于Linux的系统安全来说,日志文件是极其重要的工具。DNS日志可以记录服务器CPU的占用时间、查询的统计信息及配置中存在的问题,经常分析日志可以了解服务器的负载、性能、安全性,从而及时地采取措施,纠正错误。BIND软件默认情况下把DNS日志写到/var/log/messages文件中。